prompt1="这是一个ACM的编程题，现在请你先复述一遍题目和测试数据，按题目原本的描述进行描述，然后在进行python编程解答"
#必须选择gpt-5作为model。如果没改对，告诉他示例没有完全通过

prompt2="""
示例没有完全通过，输入输出改写成
n = input()      #指定为N个数，输入,表示第一行的输入
lst = []         #指定一个空列表
for i in range(int(n)):        #循环N次
    lst.append(int(input()))      #不断的调用接下来行的输入

"""

"""
【问题背景】在无线网络优化中，基站的位置分布直接影响信号覆盖质量。密集区域的基站可能造成资源浪费，而稀疏区域则会出现信号覆盖不足。

【任务要求】给定n个基站的二维坐标，使用K-Means算法将其划分为k个簇，再通过计算每个簇的轮廓系数（Silhouette Coefficient），识别信号覆盖最差的簇（轮廓系数最低），并在该簇中心新增基站以优化信号覆盖。

【算法过程】

使用前k个基站作为初始聚类中心，执行K-Means算法。K-means的结束条件为：最大迭代次数100或者所有簇中心点移动距离都不大于1e−6
计算每个簇的轮廓系数（簇内所有点的轮廓系数平均值）。
找出轮廓系数最低的簇。
输出该簇的中心坐标（保留两位小数），作为新增基站的位置。
K-Means和轮廓系数的详细介绍见“提示”。

输入描述
第一行：基站数量 
n和聚类簇数 k之间以空格分开，其中 
n取值范围为 [1,500]k 取值范围为 [1,120]。

接下来 
n 行：每行两个整数，表示基站的坐标 x 和 y其中 x
x 取值范围为 [0,5000]，
y 取值范围为 [0,3000]。

"""
import sys,math

# 核心解法
# 大模拟题
#没有什么算法，按照题意实现即可.

n,k=map(int,input().split())
data=[list(map(int,input().split())) for _ in range(n)] #[[0, 0], [1, 1], [2, 2], [10, 10], [11, 11], [5, 5]]

class Clu:
    def __init__(self,center):
        self.center=center
        self.points=[]
        self.sil=0 #轮廓系数

#最开始n个空簇
clus=[Clu(data[i]) for i in range(k)]  #一共有2簇，然后是由什么构成的？？？
bound = 1e-6

def dist(a,b):
    return math.sqrt((a[0]-b[0])**2+(a[1]-b[1])**2)# 求出欧式距离

#计算聚类中心
def cal_center(points):#所有坐标的平均值
    avg_x=sum(p[0] for p in points)/len(points)
    avg_y=sum(p[1] for p in points)/len(points)
    return avg_x,avg_y

for _ in range(100):
    #对于每个点，去分配对应的簇
    new_clus=clus.copy()

    for c in new_clus:
        c.points=[] #清空簇内的点，只保留质心
    for p in data:
        min_dist=10**9
        target_clu=None
        #枚举所有簇，计算最短距离以及对应的簇类，把他放进去
        for c in new_clus:
            d=dist(c.center,p)
            if d<min_dist:
                min_dist=d
                target_clu=c
        target_clu.points.append(p)
    cnt_no_move=0#计算有多少个点没有移动
    for c in new_clus:
        target_center=cal_center(c.points)
        if dist(c.center,target_center)<bound:
            cnt_no_move+=1
        c.center=cal_center(c.points)

    if cnt_no_move==len(new_clus):
        break
    #迭代簇
    clus=new_clus.copy()

#进入 轮廓系数
for c in clus:
    # 如果这个簇里就一个点，那么不用算了，直接赋值为1
    if len(c.points) == 1:
        c.sil = 1
        continue  #无问题

    for p in c.points:
        ai = 0
        for other_p in c.points:
            if p == other_p:
                continue 
            ai += dist(p , other_p) 
        ai /= len(c.points) - 1 #无问题

        bi = 10**9
        for other_c in clus:
            if other_c == c:
                continue 
            tmp_b = 0
            for other_p in other_c.points:
                tmp_b += dist(p , other_p)

            tmp_b /= len(other_c.points)

            bi = min(bi , tmp_b)#无问题

        si=(bi-ai)/max(ai,bi)
        c.sil+=si
    c.sil/=len(c.points) #平均值就是总和除以个数，这里忘了写等于号了，操排查好久。

clus.sort(key=lambda x:x.sil)
print(f"{clus[0].center[0]:.2f},{clus[0].center[1]:.2f}")


        

"""
示例一：
6 2
0 0
1 1 
2 2 
10 10
11 11 
5 5

预期输出：
8.67,8.67

"""

"""
示例二：
4 2
0 0
0 1
1 0
10 10

预期输出：
0.33 0.33

"""